#pragma once
#include <DL_COM.h>
#include <_MT_SAFE_.h>
#include <_common_data_.h>
#include <list>

struct _UNPACKING_CONF_
{
	UINT	version;
	USHORT	c_width;
	USHORT	c_height;
	//BYTE	client_type;
};


class Unpacking : public DL_COM
{
protected:
	Unpacking() = default;
public:
	using	UPK_FUNC = std::function<BOOL(_COMMON_DATA_&)>;
	using	UNPACK_DATA = _MT_SAFE_<_STREAM_DATA_<std::list>>;
	using	UNPACK_FUNC = _MT_SAFE_<UPK_FUNC>;

	virtual ~Unpacking() = default;
	virtual UNPACK_FUNC* const get_pop(_DATA_TYPE_) = 0;
	virtual UNPACK_DATA* const get_data(_DATA_TYPE_) = 0;
	virtual DL_RET exec(DL_CMD, DL_PARAM_IN = nullptr) = 0;
};